#include <stdio.h>

int main()
{
    char arr[] = {'a', 'b', 'c', 'd', 'e', 'f'};
    printf("%d \n", sizeof(arr));       // 6  数组大小 6
    printf("%d \n", sizeof(arr + 0));   // 4  arr是首元素，+0 还是首元素地址 即 4
    printf("%d \n", sizeof(*arr));      // 1  首元素的大小
    printf("%d \n", sizeof(arr[1]));    // 1  第二个元素的大小
    printf("%d \n", sizeof(&arr));      // 4   地址
    printf("%d \n", sizeof(&arr + 1));  // 4    地址
    printf("%d \n", sizeof(&arr[0] + 1)); // 4  地址

    int a[] = {1,2,3,4};
    printf("%d \n", sizeof(a));  // 16, 数组的总大小，每个int占4个字节
    printf("%d \n", sizeof(a + 0)); //4 表示第一个元素，因为是int，占4个字节
    printf("%d \n", sizeof(*a)); // 4 解引用之后是首元素，因为是int，占4个字节
    printf("%d \n", sizeof(a + 1)); // 4 第二个元素的地址的大小，因为是int，占4个字节
    printf("%d \n", sizeof(a[1])); // 4  第二个元素的大小
    printf("%d \n", sizeof(&a)); // 4   数组地址的大小
    printf("%d \n", sizeof(*&a)); // 16 取地址后解引用，相当于 a
    printf("%d \n", sizeof(&a + 1)); // 4 跳过数组a的地址，后的地址，
    printf("%d \n", sizeof(&a[0])); // 4   首元素的地址
    printf("%d \n", sizeof(&a[0] + 1)); //4 第二个元素的地址
    return 0; 
}
